現代のRustは 関数型プログラミング 原則を活用して提供する コストゼロの抽象化。関数を値として扱い、データを不変のストリームとして扱うことで、Rustは表現力豊かな I/O操作 パフォーマンスを犠牲にすることなく行える。
1. 環境とクロージャー
標準関数とは異なり、クロージャーは 環境をキャプチャする。それらは Fn、 FnMut、または FnOnce トレイトを使用して クロージャー内の所有権の移動を管理し、関数が状態を保持していてもメモリ安全が保たれることを保証する。
let v1 = vec![1, 2, 3];
let v1_iter = v1.iter().map(|x| x + 1);
// v1_iterは遅延評価でまだ実行されていません!
let v1_iter = v1.iter().map(|x| x + 1);
// v1_iterは遅延評価でまだ実行されていません!
2. 宣言的なパイプライン
使用することで イテレータアダプター、開発者は冗長なネストされたループを簡潔な論理に置き換える。 iter_mutメソッド は、安全かつ直接的な関数型変換を可能にし、コンパイラはこれらの高レベルな呼び出しを手書きループと同等のアセンブリコードに最適化する。
3. パフォーマンスベンチマーク
devプロファイルまたはリリースでコンパイルされた場合、 devプロファイル またはリリース時、 search 関数がその効率性を示す。統計的ベンチマークでは: test bench_search_iter ... ベンチマーク: 19,234,900 ナノ秒/イテレーション。これにより、これらの抽象化が本質的にコストゼロであることが確認される。
⚠️ コンパイラ警告
警告:使われていない `Map` です。イテレータは遅延評価です;`.collect()` や `.sum()` のような消費メソッドによって処理されない限り何も実行しません。
collect() または sum()。TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>